package com.hzqy.service.hqjc;

import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;

import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import com.hzqy.service.core.GenericServiceBean;
import com.hzqy.persistence.dao.hqjc.MultirateDao;
import com.hzqy.web.vo.CmContentVo;
import com.hzqy.web.vo.CmRecommendVo;

@Service
public class MultirateServiceBean extends GenericServiceBean<CmContentVo,MultirateDao,Integer> {
	protected final Logger LOG = LoggerFactory.getLogger(getClass());
	@Resource
	private MultirateDao multirateDao;
	
	@Override
	public MultirateDao getEntityDao() {
		return multirateDao;
	}
	
	public int selectContentCount(int f_catalog_id,String f_cp_cprid,int f_cc_definitionflag,String f_sa_id,String f_cc_name) {
		int results = multirateDao.selectContentCount(f_catalog_id,f_cp_cprid,f_cc_definitionflag,f_sa_id,f_cc_name);
		return results;
	}

	public List<CmContentVo> selectContentList(int f_catalog_id,int pageNo,int pageSize,String f_cp_cprid,int f_cc_definitionflag,String f_sa_id,String f_cc_name) {
		List<CmContentVo> results = multirateDao.selectContentList(f_catalog_id,pageNo,pageSize,f_cp_cprid,f_cc_definitionflag,f_sa_id,f_cc_name);
		return results;
	}
	
	public CmContentVo selectContent(int f_cc_id,int f_cp_cprid) {
		CmContentVo results = multirateDao.selectContent(f_cc_id,f_cp_cprid);
		return results;
	}
	
	/**
	 * 区分高标表以及语言版本，是通过内容的名称来的，如果名称不符合要求，则下面的存储规则也需要变化，重要！！！！！！<br/>
	 * 1、取出打包好的内容列表。<br/>
	 * 2、将内容名称通过-分隔符，变成数组，名字规则必须为“自杀森林-原声版、HD-自杀森林-原声版、自杀森林-预告片”<br/> 
	 * 3、将原声版、预告片、国语版，填充到HASH中<br/>
	 * @param f_cc_multirateid
	 * @deprecated 可使用selectContentMovie方法
	 * @return
	 */
	public HashMap<String,List<CmContentVo>> selectContentMov(int f_cc_multirateid) {
		HashMap<String,List<CmContentVo>> resultHash = new HashMap<String,List<CmContentVo>>();
//		List<CmContentVo> results = multirateDao.selectContentMovList(f_cc_multirateid,seriesFlag);
		List<CmContentVo> results = multirateDao.selectContentMovList(f_cc_multirateid);
		for(CmContentVo contentVo:results) {
			String f_cc_name = contentVo.getF_cc_name().trim(); //去空格保护
			String[] nameArray = f_cc_name.split("-");
			String nameType = nameArray[nameArray.length-1]; //取到名称的后缀，如原声版，预先片，国语片等
			List<CmContentVo> nameList = resultHash.get(nameType);
			if(nameList == null) //判断名称的后缀在Hash中是否存在
				nameList = new ArrayList<CmContentVo>();
			nameList.add(contentVo);
			resultHash.put(nameType, nameList);
		}
		return resultHash;
	}
	
	/**
	 * 区分高标表以及语言版本，是通过内容的名称来的，如果名称不符合要求，则下面的存储规则也需要变化，重要！！！！！！<br/>
	 * 返回结果为两层HASH包，最后一层LIST。<br/>
	 * 第一层HASH为高清或标清，如果未明确写明是HD，则默认为标清<br/>
	 * 第二层HASH为语言版本，如原声版，国语版，如果未写明，则默认为DEFAULT<br/>
	 * 最后一层LIST为实际的电影<br/>
	 * 名称为“HD-自杀森林”、“HD-自杀森林-原声版”、“自杀森林-原声版”、“自杀森林”、“4K-自杀森林”
	 * @param f_cc_multirateid
	 * @return
	 */
	public HashMap<String,HashMap<String,List<CmContentVo>>> selectContentMovie(int f_cc_multirateid) {
		HashMap<String,HashMap<String,List<CmContentVo>>> resultHash = new HashMap<String,HashMap<String,List<CmContentVo>>>();
		List<CmContentVo> results = multirateDao.selectContentMovList(f_cc_multirateid);
		String f_cc_name;
		String[] nameArray;
		String nameType; //取到名称的后缀，如原声版，预先片，国语片等
		for(CmContentVo contentVo:results) {
			f_cc_name = contentVo.getF_cc_name().trim(); //去空格保护
			nameArray = f_cc_name.split("-");
			if(nameArray[0].equalsIgnoreCase("HD") || nameArray[0].equalsIgnoreCase("4K")) { //当名称为“HD-自杀森林”、“HD-自杀森林-原声版”、“自杀森林-原声版”这种情况
				HashMap<String,List<CmContentVo>> languageHash = resultHash.get(nameArray[0]);
				if(languageHash != null) {
					if(nameArray.length==2) { //为高清版本“HD-自杀森林”
						List<CmContentVo> contentList = languageHash.get("DEFAULT");
						if(contentList != null) {
							contentList.add(contentVo);
						} else {
							contentList = new ArrayList<CmContentVo>();
							contentList.add(contentVo);
							languageHash.put("DEFAULT", contentList);
						}
					} else { //为高清版本“HD-自杀森林-原声版”
						nameType = nameArray[nameArray.length-1];
						List<CmContentVo> contentList = languageHash.get(nameType);
						if(contentList != null) {
							contentList.add(contentVo);
						} else {
							contentList = new ArrayList<CmContentVo>();
							contentList.add(contentVo);
							languageHash.put(nameType, contentList);
						}
						resultHash.put(nameArray[0], languageHash);
					}
						
				} else { //第一次 出现存储高清
					languageHash = new HashMap<String,List<CmContentVo>>();
					List<CmContentVo> contentList = new ArrayList<CmContentVo>();
					contentList.add(contentVo);
					if(nameArray.length==2) { //为高清的“HD-自杀森林”
						languageHash.put("DEFAULT", contentList);
					} else { //为高清的“HD-自杀森林-原声版”
						nameType = nameArray[nameArray.length-1];
						languageHash.put(nameType, contentList);
					}
					resultHash.put(nameArray[0], languageHash);	
				}
			} else { //为标清版本“自杀森林”、“自杀森林-原声版”
				HashMap<String,List<CmContentVo>> languageHash = resultHash.get("SD");
				if(nameArray.length==1) { //当名称为“自杀森林”这种情况，无语言版本也无高标清版本，所以默认为SD的DEFAULT
					if(languageHash != null) {//包中已存在标清内容LIST
						List<CmContentVo> contentList = languageHash.get("DEFAULT");
						if(contentList!=null) { //标清内容LIST中已经存在默认语言版本，在电视剧的情况下，可能是第一集或者第二集等
							contentList.add(contentVo);
						} else {
							contentList = new ArrayList<CmContentVo>();
							contentList.add(contentVo);
							languageHash.put("DEFAULT", contentList);
						}
					} else { //第一次出现标清的DEFAULT情况
						languageHash = new HashMap<String,List<CmContentVo>>();
						List<CmContentVo> contentList = new ArrayList<CmContentVo>();
						contentList.add(contentVo);
						languageHash.put("DEFAULT", contentList);
						resultHash.put("SD", languageHash);
					}
				} else {
					nameType = nameArray[nameArray.length-1];
					if(languageHash != null) { //包中已存在标清内容LIST
						List<CmContentVo> contentList = languageHash.get(nameType);
						if(contentList!=null) { //标清内容LIST中已经存在语言版本，在电视剧的情况下，可能是第一集或者第二集等
							contentList.add(contentVo);
						} else {
							contentList = new ArrayList<CmContentVo>();
							contentList.add(contentVo);
							languageHash.put(nameType, contentList);
						}
					} else { //第一次出现标清的nameType情况
						languageHash = new HashMap<String,List<CmContentVo>>();
						List<CmContentVo> contentList = new ArrayList<CmContentVo>();
						contentList.add(contentVo);
						languageHash.put(nameType, contentList);
						resultHash.put("SD", languageHash);
					}
				}
			}
		}
		
		return resultHash;
	}
	
	/**
	 * 区分高标表以及语言版本，是通过内容的名称来的，如果名称不符合要求，则下面的存储规则也需要变化，重要！！！！！！<br/>
	 * 返回结果为两层HASH包，最后一层LIST。<br/>
	 * 第一层HASH为高清或标清，如果未明确写明是HD，则默认为标清<br/>
	 * 第二层HASH为语言版本，如原声版，国语版，如果未写明，则默认为DEFAULT<br/>
	 * 最后一层LIST为实际的电视剧<br/>
	 * @param f_cc_multirateid
	 * @return
	 */
	public HashMap<String,HashMap<String,List<CmContentVo>>> selectContentSeries(int f_cc_multirateid) {
		multirateDao.selectContentSeries(f_cc_multirateid);
		HashMap<String,HashMap<String,List<CmContentVo>>> resultHash = new HashMap<String,HashMap<String,List<CmContentVo>>>();
		List<CmContentVo> results = multirateDao.selectContentSeries(f_cc_multirateid);
		String f_cc_name;
		String[] nameArray;
		String nameType; //取到名称的后缀，如原声版，预先片，国语片等
		for(CmContentVo contentVo:results) {
			f_cc_name = contentVo.getF_cc_name().trim(); //去空格保护
			nameArray = f_cc_name.split("-");
			if(nameArray[0].equals("HD")) { //当名称为“HD-自杀森林”、“HD-自杀森林-原声版”、“自杀森林-原声版”这种情况
				HashMap<String,List<CmContentVo>> languageHash = resultHash.get("HD");
				if(languageHash != null) {
					if(nameArray.length==2) { //为高清版本“HD-自杀森林”
						List<CmContentVo> contentList = languageHash.get("DEFAULT");
						if(contentList != null) {
							contentList.add(contentVo);
						} else {
							contentList = new ArrayList<CmContentVo>();
							contentList.add(contentVo);
							languageHash.put("DEFAULT", contentList);
						}
					} else { //为高清版本“HD-自杀森林-原声版”
						nameType = nameArray[nameArray.length-1];
						List<CmContentVo> contentList = languageHash.get(nameType);
						if(contentList != null) {
							contentList.add(contentVo);
						} else {
							contentList = new ArrayList<CmContentVo>();
							contentList.add(contentVo);
							languageHash.put(nameType, contentList);
						}
						resultHash.put("HD", languageHash);
					}
						
				} else { //第一次 出现存储高清
					languageHash = new HashMap<String,List<CmContentVo>>();
					List<CmContentVo> contentList = new ArrayList<CmContentVo>();
					contentList.add(contentVo);
					if(nameArray.length==2) { //为高清的“HD-自杀森林”
						languageHash.put("DEFAULT", contentList);
					} else { //为高清的“HD-自杀森林-原声版”
						nameType = nameArray[nameArray.length-1];
						languageHash.put(nameType, contentList);
					}
					resultHash.put("HD", languageHash);	
				}
			} else { //为标清版本“自杀森林”、“自杀森林-原声版”
				HashMap<String,List<CmContentVo>> languageHash = resultHash.get("SD");
				if(nameArray.length==1) { //当名称为“自杀森林”这种情况，无语言版本也无高标清版本，所以默认为SD的DEFAULT
					if(languageHash != null) {//包中已存在标清内容LIST
						List<CmContentVo> contentList = languageHash.get("DEFAULT");
						if(contentList!=null) { //标清内容LIST中已经存在默认语言版本，在电视剧的情况下，可能是第一集或者第二集等
							contentList.add(contentVo);
						} else {
							contentList = new ArrayList<CmContentVo>();
							contentList.add(contentVo);
							languageHash.put("DEFAULT", contentList);
						}
					} else { //第一次出现标清的DEFAULT情况
						languageHash = new HashMap<String,List<CmContentVo>>();
						List<CmContentVo> contentList = new ArrayList<CmContentVo>();
						contentList.add(contentVo);
						languageHash.put("DEFAULT", contentList);
						resultHash.put("SD", languageHash);
					}
				} else {
					nameType = nameArray[nameArray.length-1];
					if(languageHash != null) { //包中已存在标清内容LIST
						List<CmContentVo> contentList = languageHash.get(nameType);
						if(contentList!=null) { //标清内容LIST中已经存在语言版本，在电视剧的情况下，可能是第一集或者第二集等
							contentList.add(contentVo);
						} else {
							contentList = new ArrayList<CmContentVo>();
							contentList.add(contentVo);
							languageHash.put(nameType, contentList);
						}
					} else { //第一次出现标清的nameType情况
						languageHash = new HashMap<String,List<CmContentVo>>();
						List<CmContentVo> contentList = new ArrayList<CmContentVo>();
						contentList.add(contentVo);
						languageHash.put(nameType, contentList);
						resultHash.put("SD", languageHash);
					}
				}
			}
		}
		return resultHash;
	}
	
	/**
	 * 根据剧头code拿到包id，epg最新上线、电影跳转详情页只能传剧头code
	 * @param f_cc_code
	 * @return
	 */
	public int selectMultirateIDByCode(String f_cc_code) {
		int result = multirateDao.selectMultirateIDByCode(f_cc_code);  
		return result;
	}
}
